Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

268
Visualizações
¿Cómo usar TypeScript "keyof" para crear una interfaz para la interfaz API genérica?

Tengo problemas para usar el sistema de tipos de TypeScript para modelar una interfaz genérica para llamar desde Lua a TypeScript. Para que esto funcione, el desarrollador debe definir una interfaz de TypeScript que defina los métodos de TypeScript a los que Lua puede llamar. Los detalles no importan mucho aquí, ya que el ejemplo simple a continuación ilustra mi confusión.

KeyofDemo

Como puede ver en el código anterior, tengo "ApiInterface", que define métodos arbitrarios que un desarrollador puede querer invocar desde Lua. Todos estos métodos toman un primer argumento que es un objeto (similar a 'esto'), y los argumentos restantes pueden ser lo que el desarrollador necesite pasar de Lua al método TypeScript. En la práctica, los únicos tipos compatibles con estos argumentos restantes son primitivas como número, cadena, booleano, nulo. En el código de ejemplo anterior, definí 3 de estos métodos API, pero el desarrollador puede definir los métodos que desee. El objetivo de este módulo Lua-to-TypeScript es ser genérico y no estar vinculado a ninguna definición particular de "ApiInterface".

El tiempo de ejecución eventualmente empaqueta la llamada al método Lua-to-TypeScript en un objeto de tipo ApiCall, que puede ver que está definido con campos para el nombre del método, el objeto JavaScript que se usará para "esto" y los argumentos arbitrarios restantes.

Para ilustrar mi confusión, he mostrado una KeyofDemo para ilustrar el error de TypeScript que recibo. Hay un método de "ejecutar" en la clase KeyofDemo que quiere tomar el objeto ApiCall e invocar la función TypeScript/JavaScript correspondiente.

Puede ver el ondulado rojo debajo de la invocación real del método en los dos casos. Un caso es donde no hay argumentos adicionales (más allá del argumento "este" requerido), y el otro caso es cuando ApiCall.args en realidad se completa con una matriz de argumentos para pasar de Lua a TypeScript.

El mensaje de error del primer caso rojo ondulado es: A spread argument must either have a tuple type or be passed to a rest parameter .

El mensaje de error del segundo caso rojo ondulado es: Expected 3 arguments but got 1 .

Ninguno de estos mensajes de error tiene ningún sentido para mí. Si trato de compilar el código TypeScript anterior, el compilador informa errores similares.

¿Cómo puedo hacer que el sistema de tipos de TypeScript modele mejor el comportamiento que he descrito? Por ahora, he solucionado el problema cambiando las líneas 23 y 25 del caso "this.api" a "any", y esto cierra el compilador de TypeScript. Pero me gustaría saber cómo modelar correctamente este problema.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

El primer error se debe a que Javascript/Typescript no admite el uso de operadores de distribución en los parámetros, a menos que su función esté configurada para hacerlo.

Tienes que configurar la función para aceptar parámetros variados.

 interface ApiInterface { apiMethod0(thisObj: Object, ...args: any[]): void apiMethod1(thisObj: Object, ...args: [string]): void apiMethod2(thisObj: Object, ...args: [number, boolean]): void }

Ver este código en el patio de recreo

El segundo error se debe a que todos los métodos deben tener la misma "forma" o tener el mismo número de parámetros. En este caso matamos a los dos pájaros con el mismo tiro.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda